/**
 * 
 */
package ar.com.fiuba.team2.parser;

import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;

import ar.com.fiuba.team2.model.MiembroChat;

/**
 * Contiene la lógica para el parsea de un XML a un {@link MiembroChat}.
 * 
 * @author sergio
 */
public abstract class MiembroParser extends GeneralParser {

	private static Logger log = LogManager.getLogger(MiembroChat.class);
	
	/**
	 * Obtiene el resultado de una consulta, y parsea el elemento <list>
	 * parseando el primer elemento de la lista.
	 * 
	 * @param xml a parsear
	 * @param miembro a completar con los datos del XML
	 * @return true si se parseo con exito.
	 */
	public static boolean parseMiembro(String xml, MiembroChat miembro) {
		SAXBuilder saxBuilder = new SAXBuilder();
		boolean result = false;
		
		log.info("xml a parsear " + xml);
		try {
		    Document doc = saxBuilder.build(new StringReader(xml));
			Element rootElement = doc.getRootElement().getChild("list");
			Element mchat = rootElement.getChildren("MiembroChat").get(0);
			
			miembro.fromXML(mchat);
			result = true;
		} catch (JDOMException e) {
			log.error("error al parsear miembro", e);
		} catch (IOException e) {
			log.error("error al parsear miembro", e);
		} catch (RuntimeException e) {
			log.error("error al parsear miembro", e);
		}
		
		return result;
	}
	
	/**
	 * Obtiene el resultado de una consulta, y parsea el elemento <list>
	 * devolviendo una lista de {@link MiembroChat}.
	 * 
	 * @param xml a parsear.
	 * @return List con los miembros del XML.
	 */
	public static List<MiembroChat> parseMiembros(String xml) {
		List<MiembroChat> miembros = new ArrayList<MiembroChat>();

		log.info("xml a parsear " + xml);
		SAXBuilder saxBuilder = new SAXBuilder();
		try {
		    Document doc = saxBuilder.build(new StringReader(xml));

			Element rootElement = doc.getRootElement().getChild("list");
		    for (Element element : rootElement.getChildren("MiembroChat")) {
		    	MiembroChat miembro = new MiembroChat();
		    	miembro.fromXML(element);
				miembros.add(miembro);	
			}
		} catch (JDOMException e) {
			log.error("error al parsear miembros", e);
		} catch (IOException e) {
			log.error("error al parsear miembros", e);
		} catch (RuntimeException e) {
			log.error("error al parsear miembros", e);
		}
		
		return miembros;
	}

}
